package com.huike.clues.mapper;

import java.util.List;

import com.huike.common.core.domain.entity.SysMenu;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 菜单表 数据层
 */
@Mapper
public interface SysMenuMapper {
    /**
     * 根据用户ID查询权限
     *
     * @param userId 用户ID
     * @return 权限列表
     */
    public List<String> selectMenuPermsByUserId(Long userId);

    /**
     * 根据用户ID查询菜单
     *
     * @return 菜单列表
     */
    public List<SysMenu> selectMenuTreeAll();

    /**
     * 根据用户ID查询菜单
     *
     * @param userId 用户ID
     * @return 菜单列表
     */
    public List<SysMenu> selectMenuTreeByUserId(Long userId);

    /**
     * @description: 根据菜单编号获取详细信息
     * @param: menuId
     * @return: com.huike.common.core.domain.entity.SysMenu
     * @author STJ12138
     * @date: 2023/7/11 13:29
     */
    public SysMenu selectMenuById(Long menuId);

    /**
     * @description: 新增菜单
     * @param: sysMenu
     * @return: void
     * @author STJ12138
     * @date: 2023/7/11 15:03
     */
    void insertMenu(SysMenu sysMenu);

    /**
     * @description: 修改菜单
     * @param: sysMenu
     * @return: void
     * @author STJ12138
     * @date: 2023/7/11 15:05
     */
    void updateMenu(SysMenu sysMenu);

    /**
     * @description: 根据菜单id查询子菜单
     * @param: menuId
     * @return: java.lang.Integer
     * @author STJ12138
     * @date: 2023/7/11 15:19
     */
    Integer hasChildByMenuId(Long menuId);

    /**
     * @description: 根据菜单id查询是否已分配角色
     * @param: menuId
     * @return: java.lang.Integer
     * @author STJ12138
     * @date: 2023/7/11 15:48
     */
    Integer selectRoleMenuByMenuId(Long menuId);


    /**
     * @description: 根据菜单id删除菜单
     * @param: menuId
     * @return: void
     * @author STJ12138
     * @date: 2023/7/11 15:56
     */
    void deleteMenuById(Long menuId);

    List<SysMenu> selectMenuListByUserId(@Param("sysMenu") SysMenu sysMenu, @Param("userId") Long userId);

    List<SysMenu> selectMenuList(SysMenu sysMenu);

    List<Integer> selectMenuListByRoleId(@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly);
}
